package com.itheima.health.mobile.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import com.itheima.health.common.MessageConst;
import com.itheima.health.common.RedisConst;
import com.itheima.health.entity.Result;
import com.itheima.health.pojo.Setmeal;
import com.itheima.health.service.SetMealService;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/mobile/setmeal")
@Slf4j
public class SetMealController {

    @Reference
    private SetMealService setMealService;

    @Autowired
    private JedisPool jedisPool;

    /**
     * 查询套餐
     * @return
     */
    @GetMapping("/getSetmeal")
    public Result getSetmeal(){
        //rpc调用查询所有套餐
        List<Setmeal> setmeals = new ArrayList<>();

        try(Jedis jedis = jedisPool.getResource()){
            String jsonString = jedis.get(RedisConst.KEY_SETMEAL_LIST);
            //判断Redis里是否有缓存
            if(!"null".equals(jsonString) && !StringUtils.isEmpty( jsonString)){
                //有缓存
                setmeals = JSON.parseArray(jsonString, Setmeal.class);
            }else {
                //没有缓存
                setmeals = setMealService.findAll();
                String setmealsJsonString = JSON.toJSONString(setmeals);
                jedis.set(RedisConst.KEY_SETMEAL_LIST,setmealsJsonString);
            }

        }
        return new Result(true, MessageConst.GET_SETMEAL_LIST_SUCCESS,setmeals);
    }
    @GetMapping("/findById")
    public Result findById(Integer id){
        //rpc调用查询数据
        Setmeal setmeal = new Setmeal();
        try(Jedis jedis = jedisPool.getResource()){
            String jsonString = jedis.get(RedisConst.KEY_SETMEAL_LIST+id);
            log.info("jsonString:{}",jsonString);

            //判断Redis里是否有缓存
            if(!"null".equals(jsonString) && !StringUtils.isEmpty( jsonString)){
                //有缓存
                setmeal = JSON.parseObject(jsonString, Setmeal.class);
            }else {
                //如果Redis里没有缓存
                setmeal = setMealService.findById(id);
                String setmealJsonString = JSON.toJSONString(setmeal);
                jedis.set(RedisConst.KEY_SETMEAL_LIST+id,setmealJsonString);
            }
        }

        return new Result(true,MessageConst.QUERY_SETMEAL_SUCCESS,setmeal);
    }
}






